package top.lixunda.ecommerce.server.good.api.entity.vo;

import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.beans.BeanUtils;
import top.lixunda.common.utils.ObjectValidators;
import top.lixunda.ecommerce.server.good.api.entity.db.UserCarDO;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author Xumda
 * @version time:2019/12/27 16:59
 */
@SuppressWarnings("unused")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel
public class UserCarVO {

    /**
     * 购物车物品id
     */
    private Integer id;

    /**
     * 用户id
     */
    private Integer userId;

    /**
     * 商家id，不能为空，为空时表示店铺数据已被删除，理论上不会进行删除，只会通过更改特殊字段的方式删除数据
     */
    private Integer storeId;

    /**
     * 商家名称
     */
    private String storeName;

    /**
     * 商品id，不能为空，为空时表示商品数据已被删除，理论上不会进行删除，只会通过更改特殊字段的方式删除数据
     */
    private Integer goodId;

    /**
     * 商品名称
     */
    private String goodName;

    /**
     * 子商品id，不能为空，为空时表示子商品数据已被删除，理论上不会进行删除，只会通过更改特殊字段的方式删除数据
     */
    private Integer subGoodId;

    /**
     * 子商品名称
     */
    private String subGoodName;

    /**
     * 数量，大于等于一
     */
    private Integer count;

    /**
     * 加入购物车时的价格，不作为支付标准，支付时应重新查询商品价格，单价
     */
    private BigDecimal price;

    /**
     * 删除描述，加入订单，手动删除
     */
    private String useableDesc;

    /**
     * 备注
     */
    private String remark;

    public static UserCarVO fromUserCarDO(UserCarDO userCarDO) {
        if (userCarDO == null) {
            return null;
        }
        UserCarVO vo = new UserCarVO();
        BeanUtils.copyProperties(userCarDO, vo);
        return vo;
    }

    public static List<UserCarVO> fromUserCarDO(List<UserCarDO> userCarDoList) {
        if (userCarDoList == null) {
            return null;
        }
        if (ObjectValidators.isEmpty(userCarDoList)) {
            return Collections.emptyList();
        }
        List<UserCarVO> list = new ArrayList<>(userCarDoList.size());
        UserCarVO vo;
        for (UserCarDO userCarDO : userCarDoList) {
            vo = fromUserCarDO(userCarDO);
            if (vo != null) {
                list.add(vo);
            }
        }
        return list;
    }



}
